#include<iostream>

using namespace std;

//class A
//{
//public:
//	virtual void func1()
//	{
//		cout << "A::func1()" << endl;
//	}
//
//public:
//	int _a;
//};
//
//
////class B : public A
//class B : virtual public A
//{
//public:
//	virtual void func1()
//	{
//		cout << "B::func1()" << endl;
//	}
//
//	virtual void func2()
//	{
//		cout << "C::func2()" << endl;
//	}
//public:
//	int _b;
//};
////class C : public A
//class C : virtual public A
//{
//public:
//	virtual void func1()
//	{
//		cout << "C::func1()" << endl;
//	}
//
//	virtual void func2()
//	{
//		cout << "C::func2()" << endl;
//	}
//public:
//	int _c;
//};
//class D : public B, public C
//{
//public:
//	virtual void func1()
//	{
//		cout << "D::func1()" << endl;
//	}
//
//	virtual void func3()
//	{
//		cout << "D::func3()" << endl;
//	}
//public:
//	int _d;
//};
//
//
//int main()
//{
//	D d;
//	
//	d.B::_a = 1;
//	d.C::_a = 2;
//	d._b = 3;
//	d._c = 4;
//	d._d = 5;
//
//
//	return 0;
//}



#include"BinarySearchTree.h"

int main()
{
	//int a[] = { 8, 3, 1, 10, 6, 4, 7, 14, 13 };
	int a[] = { 7 , 2 , 4 , 6 ,3 , 1 , 5 };
	BinarySearchTree<int> t;
	for (auto e : a)
	{
		t.insert(e);
	}
	t.InOrder();

	t.insert(8);

	t.InOrder();

	/*t.erase(4);
	t.InOrder();

	t.erase(6);
	t.InOrder();

	t.erase(7);
	t.InOrder();

	t.erase(3);
	t.InOrder();

	for (auto e : a)
	{
		t.erase(e);
	}
	t.InOrder();*/

	/*t.erase(8);
	t.InOrder();

	t.erase(3);
	t.InOrder();

	t.erase(1);
	t.InOrder();*/
	return 0;
}